package tallerweb.sangucheto.utils;

import java.util.LinkedList;
import java.util.List;

import tallerweb.sangucheto.model.Ingrediente;
import tallerweb.sangucheto.model.TipoIngrediente;

public class Sanguchetto {

	private static Sanguchetto instance = new Sanguchetto();
	private List<Ingrediente> ingredientes = new LinkedList<Ingrediente>();
	
	private Sanguchetto(){}
	
	public static Sanguchetto getInstance(){
		return instance;
	}
	
	/**
	 * Elimina todos los ingredientes del sanguchetto.<br>
	 */
	public void vaciar(){
		// Implementar
		ingredientes.clear();
	}
	
	/**
	 * Agrega un ingrediente al carrito.<br>
	 * @param ingrediente
	 */
	public void agregarIngrediente(Ingrediente ingrediente){
		// Implementar
		ingredientes.add(ingrediente);
	}
	
	
	/**
	 * Agrega un ingrediente al carrito.<br>
	 * @param ingrediente
	 * ialessan
	 */
	public void eliminar(Ingrediente ingrediente){
		// Implementar
		ingredientes.remove(ingrediente);
	}
	
	/**
	 * Lista todos los ingredientes que forman parte del sanguchetto.<br>
	 * @return
	 */
	public List<Ingrediente> verIngredientes(){
		// Implementar
		//return null;
		List<Ingrediente> ingredienteList = new LinkedList<Ingrediente>();
		for (Ingrediente ing : ingredientes) {
			if(ing.getTipo().equals(TipoIngrediente.INGREDIENTE))
			{
				ingredienteList.add(ing);
			}
		}
		return ingredienteList;
	}
	
	/**
     * Lista todos los condimentos que forman parte del sanguchetto.<br>
     * @return
     */
    public List<Ingrediente> verCondimentos(){
        // Implementar
        //return null;
    	List<Ingrediente> condimentosList = new LinkedList<Ingrediente>();
		for (Ingrediente con : ingredientes) {
			if(con.getTipo().equals(TipoIngrediente.CONDIMENTO))
			{
				condimentosList.add(con);
			}
		}
		return condimentosList;
    }
	
	/**
	 * Devuelve el precio total del sanguchetto.<br>
	 * @return
	 */
	public Double getPrecio(){
		// Implementar
		//return null;
		Double precio = 0.00;
		for(Ingrediente ing : ingredientes)
		{
			precio += ing.getPrecio();
		}
		
		return precio;
	}
	
	/**
	 * Devuelve la cantidad agregada al sanguchetto de un ingrediente dado.<br>
	 * Si no se ha agregado aun ese ingrediente al sangucheto retorna 0
	 * @return
	 */
	public Integer getCantidadAgregadaDeIngrediente(Ingrediente ing){
		
		Integer cantidadAgregadaDeIngrediente = new Integer(0);;
		
		
	     for(Ingrediente ingreEnSanguchetto : this.verIngredientes()){
	    	 if(ingreEnSanguchetto.equals(ing)){
	    		 cantidadAgregadaDeIngrediente ++;
	    	 }
	     }
	     for(Ingrediente ingreEnSanguchetto : this.verCondimentos()){
	    	 if(ingreEnSanguchetto.equals(ing)){
	    		 cantidadAgregadaDeIngrediente ++;
	    	 }
	     }
		
		return cantidadAgregadaDeIngrediente;
	}
	
	
}
